package thread;

/**
 * 静态方法的同步块
 * 当一个静态方法添加synchronized,那么该方法一定具有同步效果;
 * 1.因为静态方法没有this对象,需要使用类对象作为同步锁;
 * 2.静态方法属于类,不属于任何实例;
 * 3.Boo.class在JVM中只有一个实例,即:每个类在JVM运行期间只有一个对应的class对象;
 */
public class Demo08Sync {
    public static void main(String[] args) {
        //lambda表达式:如果方法中只有一句代码,{}也可以省略
        Thread t1 = new Thread(() -> Boo.doSome());
        Thread t2 = new Thread(() -> Boo.doSome());
        t1.start();
        t2.start();
    }
}

class Boo {
    //public synchronized static void doSome(){
    public static void doSome(){
        try {
            synchronized (Boo.class){ //一定会有同步效果;
                Thread t = Thread.currentThread();
                System.out.println("正在执行doSome方法...");
                Thread.sleep(5000);
                System.out.println("执行doSome方法完成!");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}











